/*
 * TopologicalSorter.java - Copyright May 14, 2012 Z Networks Group, Inc. All rights reserved.
 * Z Networks Group PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */
package com.andromeda.util.dependency;

import java.util.List;
import java.util.Set;

/**
 * Es un objeto capaz de hacer un ordenamiento topológico de un conjunto de
 * objetos dependientes de otros.
 *
 * @author Dickinson Roman Arismendy Torres
 */
public interface TopologicalSorter {

    /**
     * Realiza el ordenamiento de los elementos y los retorna en una lista, esta
     * lista no es igual para todos los algoritmos de ordenamiento pero debe
     * garantizar que en los primeros lugares estarán los elementos que no
     * dependen de ningún otro elemento y al final los elementos que no tienen
     * elementos dependientes.
     *
     * @param dependents el conjunto de elementos a ordenar.
     * @return la lista ordenada no nula.
     */
    public List<Dependent> sort(Set<? extends Dependent> dependents);
}
